package com.hydra.base.feign;

import com.hydra.base.dto.auth.AuthUser;
import com.hydra.base.operate.log.dto.CommonData;
import com.hydra.base.resp.Response;
import com.hydra.jres.interceptor.FeignInterceptor;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * 邮件服务类的第三方远程调用接口
 * 注意，FeignClient注解的url加个冒号是为了允许读取的配置不存在时赋空值
 */
@Component
@FeignClient(
        value="${feign.service.auth-service.name}",
        url="${feign.service.auth-service.url:}",
        contextId = "auth-service",
        configuration = FeignInterceptor.class
)
public interface OpenFeignAuthService {

    /**
     * 根据code获取用户信息
     * @param codeList 用户code列表
     * @return      列表对象
     */
    @GetMapping(path = "/api/auth/user/listAuthUserByCodeList")
    Response<List<AuthUser>> listAuthUserByCodeList(@RequestParam("codeList") List<String> codeList);


    /**
     * 根据字典类型查询字典
     * @param typeCode  字典类型
     */
    @GetMapping("/api/sys/dict/data/getDictDataByTypeCode")
    Response<List<CommonData>> getDictDataByTypeCode(@RequestParam("typeCode") String typeCode);
    /**
     * 根据字典类型查询字典
     * @param typeCode  字典类型
     */
    @GetMapping("/api/sys/dict/data/getDictDataMapByTypeCode")
    Response<Map<String, CommonData>> getDictDataMapByTypeCode(@RequestParam("typeCode") String typeCode);

    /**
     * 根据字典类型、编码查询字典
     * @param typeCode  字典类型
     * @param code      字典编码
     */
    @GetMapping("/api/sys/dict/data/getDictDataByTypeCodeAndCode")
    Response<CommonData> getDictDataByTypeCodeAndCode(@RequestParam("typeCode") String typeCode, @RequestParam("code") String code);

    /**
     * 根据类型编码和状态获取字典数据
     */
    @GetMapping("/api/sys/dict/data/getDictDataByTypeCodeAndStatus")
    Response<CommonData> getDictDataByTypeCodeAndStatus(@RequestParam("typeCode") String typeCode, @RequestParam("status") String status);

    /**
     * 根据字典类型、数据name查询字典
     * @param typeCode  字典类型
     * @param name      数据name
     */
    @GetMapping("/api/sys/dict/data/getDictDataByTypeCodeAndName")
    Response<CommonData> getDictDataByTypeCodeAndName(@RequestParam("typeCode") String typeCode, @RequestParam("name") String name);

    /**
     * 生成发号器编码
     * @param type  编码type
     */
    @GetMapping("/api/auth/serialNo/generateCode")
    Response<String> generateSerialNoCode(@RequestParam("type") String type);


}
